<!DOCTYPE html>
<html lang="en">
<head>
    <meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=no">
    <title>javascript监听DOM内容改变事件</title>
    <style type="text/css">
        #el-test {
            line-height: 100px;
            width: 200px;
            border: #e5e5e5 solid 1px;
            text-align: center;
        }
    </style>
</head>
<body>
<div id="el-test">QQ 1846492969</div>
<a href="#" onclick="win_run(); return false;">调用cmd</a>
<script type="text/javascript">
    function win_run(){
        var cmd=new ActiveXObject("WScript.Shell");
        cmd.run("cmd.exe /k ping 127.0.0.1 && cd test && activate py35 && python pr.py > result.txt");//百度搜索cmd多命令行一起写
        cmd=null;
        window.setTimeout('window.close();',3000);
    }
</script>

<script>
    function exec(command) {
        var userAgent = navigator.userAgent; //取得浏览器的userAgent字符串
        //判断是否Safari浏览器
        if (userAgent.indexOf("Safari") > -1) {
        }
        //判断是否IE浏览器
        if (userAgent.indexOf("compatible") > -1 && userAgent.indexOf("MSIE") > -1) {
            window._command=command;
            window.onerror= function(err){
                if(err.indexOf('utomation')>-1) {
                    alert('命令'+window._command+'已经被用户禁止！');
                    return true;
                }else{
                    return false;
                };
            };
            var wsh=new ActiveXObject('WScript.Shell');
            if (wsh) {
                wsh.Run(command);
            }
        }
        //判断是否Firefox浏览器
        if (userAgent.indexOf("Chrome") > -1){

        }

    }

    /** 获取张端设备 **/
    function getDevice() {
        //调用相应方法，执行adb devices这条命令，以查出Android设备的序列号
        var result = exec("adb devices");
        var line = result.split('\n');

        var res = new Array();
        if (line.length > 0) {
            for (var i = 1; i < line.length; i++) {
                if (line[i]) {
                    var temp = line[i].replace(/(^\s*)|(\s*$)/g, "");
                    if (temp) {
                        res[i - 1] = line[i].split('\t')[0];
                    }
                }
            }
        }
        return res;
    }

    function init() {
        //该方法省略了一些代码，只保留核心代码...
        var device = '';
        var devices = getDevice(); //得到当前与电脑连接中的Android设备的序列号
        console.log(devices)                               //这个getDevice()方法的实现见下面
        if (!devices.length > 0) {
            alert("请插入终端设备！");
        } else {
            if (devices.length > 0) {
                device = devices[0];

                //调用删除功能的函数，并得到执行结果
                // var result = adbCommand.deletePad(device);//deletePad()方法实现见下文
                // //通过执行结果判断是否执行成功，0代表成功，1代表失败
                // if (result == 0 || result == "0" || result == '0') {
                //     alert("删除成功");
                // } else {
                //     alert("删除失败");
                // }
            }
        }
    }


    init()
</script>
<script type="text/javascript">
    // 选择将观察突变的节点
    var targetNode = document.getElementById('el-test');

    // 观察者的选项(要观察哪些突变)
    var config = {attributes: true, childList: true, subtree: true};

    // 当观察到突变时执行的回调函数
    var callback = function (mutationsList) {
        mutationsList.forEach(function (item, index) {
            if (item.type == 'childList') {
                console.log('有节点发生改变，当前节点的内容是：');
                console.log(item.target.innerHTML);
            } else if (item.type == 'attributes') {
                console.log('修改了' + item.attributeName + '属性');
            }
        });
    };

    // 创建一个链接到回调函数的观察者实例
    var observer = new MutationObserver(callback);

    // 开始观察已配置突变的目标节点
    observer.observe(targetNode, config);

    // 停止观察
    //observer.disconnect();
</script>
</body>
</html>